#ifndef _Rectangulo_h
#define _Rectangulo_h
#include <iostream>
using namespace std;
#include "Coordenada.h"
#include "Figura2D.h"
#include "ExcepcionSVG.h"

/** \file Rectangulo.h
* \brief Clase Rectangulo
*
* Este fichero contiene la definición de la clase Rectangulo.
* JAVIER ANTON DIAZ DNI:48629698Q
* STANISLAV LITVINENKO DNI:02062226T
*/


/** \brief Clase Rectangulo.
 *
 * Definición de la clase Rectangulo.
 */
class Rectangulo : public Figura2D
{

	/** \brief Sobrecarga del operador "<<".
	*
	* Este método nos devuelve un ostream& en el que hemos escrito una salida según el formato svg, que hemos dispuesto.
	* \param os Tipo ostream&.
	* \param r Tipo Rectangulo&
	* \return El método devuelve un ostream&.
	*/
	friend ostream& operator<<( ostream&, const Rectangulo&);

	public:

		/** \brief Constructor de objeto Rectangulo
		*
		* Pasamos tres argumentos, un objeto Coordenada pcentro, para definer el centro del circulo, un float pradio para el radio.
		* Estos valores se encuentran definidos por defecto a su vez.
		* \param porigen Tipo Coordenada.
		* \param pbase De tipo float
		* \param paltura Tipo float.
		* \param grosor tipo int.
		* \param fondo tipo Color
		* \param linea tipo Color
		*/
		Rectangulo( Coordenada porigen = Coordenada(0,0) , float pbase = 0.0 , float paltura = 0.0, int grosor = 1,Color fondo=black, Color linea=none);

		/** \brief Constructor de copia.
		*
		* Pasado un objeto crea uno igual a este sin alterarlo.
		* \param r Un objeto de tipo const Rectangulo&.
		*/
		Rectangulo(const Rectangulo&);

		/** \brief Destructor de objetos Rectangulo.
		*
		* Se ejecuta cuando hace falta destruir un objeto, asignando a sus partes valores -1.
		*/
		~Rectangulo();

		/** \brief Sobrecarga del operador "=".
		*
		* Mediante este método, copiamos el contenido de un objeto Rectangulo "c" a el que queramos asignarselo.
		* \param r Tipo const Rectangulo
		* \return El método devuelve un objeto Rectangulo&
		*/
		Rectangulo& operator=(const Rectangulo&);

		/** \brief getBase().
		*
		* Este método devuelve el valor del atributo base de la clase Rectangulo.
		*
		* \return El método devuelve un float
		*/
		float getBase() const;

		/** \brief getAltura().
		*
		* Este método devuelve el valor del atributo altura de la clase Rectangulo.
		*
		* \return El método devuelve un float
		*/
		float getAltura() const;

		/** \brief setBase().
		*
		* Este método nos permite modificar el valor de la base del objeto que lo llame.
		* \param b Tipo float.
		* \return El método no devuelve nada.
		*/
		void setBase( float );

		/** \brief setAltura().
		*
		* Este método nos permite modificar el valor de la altura del objeto que lo llame.
		* \param a Tipo float.
		* \return El método no devuelve nada.
		*/
		void setAltura( float );

		/** \brief pintar.
		*
		* Este método recibe un parámetro os tipo ostream mediante el cual efectúa la salida en el formato que queremos.
		* \param os Tipo ostream&.
		* \return El método no devuelve nada.
		*/
		void pintar( ostream& ) const;

		/** \brief leeEntrada().
		*
		* Este método procesa la linea del fichero para rellenar los datos de un Rectangulo.
		* \param is flujo de entrada.
		* \return El método no devuelve nada.
		*/
		void leeEntrada(istream&);

		/** \brief clonar().
		*
		* Este método crea una figura Rectangulo clonica al original.
		* \return El método devuelve un puntero a ese objeto clonico.
		*/
		Rectangulo* clonar() const;

		/** \brief escalar().
		*
		* Este método eleva el radio de la figura Rectangulo.
		* \param porcentaje cuanto debe de ser elevado el radio.
		* \return El método no devuelve nada.
		*/
		void escalar(float porcentaje=100.0);		

	private:
		/** \brief Variables base.
		 *
		 * 	Almacena un float para especificar el tamaño de la base.
		 */
		float base;

		/** \brief Variables altura.
		 *
		 * 	Almacena un float para especificar el tamaño de la altura del rectangulo.
		 */
		float altura;

		/** \brief Variable tipo "Coordenada";
		 *
		 *	La variable centro lleva dos coordenadas X e Y que representan la posicion de la figura en el lienzo.
		 */
		Coordenada origen;
};


#endif
